עכשיו, אני רוצה להציג את ערכי המערך לפי סדר יורד של המפתחות (למעלה - מפתח הכי גבוה; למטה - מפתח הכי נמוך), אבל אני רוצה שאם יהיו כמה מפתחות זהים - הם יסתדרו לפי ה-a, b, c של הערכים (בתוך סידור המפתחות).
לאחר מכן, הפכתי את זה, כך שהמפתחות הקודמים (המספרים) הם הערכים החדשים, והערכים הישנים הם המפתחות החדשים.
לדוגמא, נניח שיש לי מערך כזה (מפתח - ערך):
93 - abc
82 - gnj
109 - fjn
93 - pdo
57 - dksm
אני רוצה שהוא יסתדר כך (ולאחר מכן אהפוך את המפתחות לערכים ואת הערכים למפתחות):
109 - fjn
93 - abc
93 - pdo
82 - gnj
57 - dksm
ולא ששני ה-93 יסתדרו באקראיות ביניהם.
השתמשתי, כמובן, ב-arsort().
אשמח לעזרה.
תודה מראש.
15 תשובות
כלומר במילים פשוטו אתה רוצה לסדר מערך לפי המפתחות שלו בסדר יורד, אבל אם לשני ערכים יש את אותו מפתח - לסדר לפי הערך שלהם?
עכשיו אני צריך רק להבין איך זה שיש לך שני אלמנטים במערך עם אותו מפתח כי זה בלתי אפשרי.
כן. :)
$files_array=glob("{*.php,*.html}",GLOB_BRACE|GLOB_NOSORT);
foreach ($files_array as $file_path) {
if ($file_path!="pie.php"&&$file_path!="index.php") {
$files[$file_path]=filectime($file_path);}}
arsort($files);
arsort($files);
$filesnames=array_keys($files);
foreach ($filesnames as $file) {
echo '<a href="'.$file.'">'.$file.'</a> - עודכן לאחרונה ב-'.date("d.n.Y H:i:s.", filectime($file)).'<br />';}?>
יש שם פעמיים arsort($files); בגלל שזה עזר לי פעם, אבל עכשיו לא...
הבנתי מה אתה רוצה לעשות. אין לך פה שני אלמנטים אם אותו מפתח. כל אופן, יש את הפונקציה array_multisort
בה אתה יכול למיין מערך לפי סדר של מערכים אחרים. "המערכים האחרים" זה רשימה לפי הסדר קודם של זמנים, ואחר כך של שמות. יוצא משהו כזה:
תודה. :)
לא הצלחתי להבין... יש סיכוי שתוכל לכתוב את הקוד המלא כמו שכתבתי למעלה לפי מה שאמרת?
$files_array=glob("{*.php,*.html}",GLOB_BRACE|GLOB_NOSORT);
foreach ($files_array as $file_path) {
if ($file_path!="pie.php"&&$file_path!="index.php") {
$files[$file_path]=filectime($file_path);}}
$new = array_multisort(array_values($files), SORT_DESC, array_keys($files), SORT_ASC, $files);
foreach ($filesnames as $file) {
echo '<a href="'.$file.'">'.$file.'</a> - עודכן לאחרונה ב-'.date("d.n.Y H:i:s.", filectime($file)).'<br />';}?>
את ה foreach האחרון צריך לעשות על המערך new לא על filenames
ואני צריך לעשות עריכת תשובות כאן :)
XDDD
Warning: Invalid argument supplied for foreach() in /home/u710538374/public_html/index.php on line 26
טעות שלי, array_multisort לא מחזירה ערך, אלה משנה את הערכים שמעבירים אליה.
זה אמור להיות ככה:
$files_array=glob("{*.php,*.html}",GLOB_BRACE|GLOB_NOSORT);
foreach ($files_array as $file_path) {
if ($file_path!="pie.php"&&$file_path!="index.php") {
$files[$file_path]=filectime($file_path);}}
array_multisort(array_values($files), SORT_DESC, array_keys($files), SORT_ASC, $files);
foreach ($files as $file) {
echo '<a href="'.$file.'">'.$file.'</a> - עודכן לאחרונה ב-'.date("d.n.Y H:i:s.", filectime($file)).'<br />';}
קודם כל, תודה ענקית לך! (כרגיל)
עכשיו, מה שכתבת לא עשה מה שהוא צריך לעשות...
הקוד הבא כן עושה את זה:
$files_array=glob("{*.php,*.html}",GLOB_BRACE|GLOB_NOSORT);
foreach ($files_array as $file_path) {
if ($file_path!="pie.php"&&$file_path!="index.php") {
$files[$file_path]=filectime($file_path);}}
array_multisort(array_values($files), SORT_DESC, array_keys($files), SORT_ASC, $files);
foreach ($files as $file) {
echo '<a href="'.key($files).'">'.key($files).'</a> - עודכן לאחרונה ב-'.date("d.n.Y H:i:s.", $file).'<br />'; next($files);}?>
יש בעיה קטנה.
את הקובץ האחרון הוא מציג לי כך:
"- עודכן לאחרונה ב-05.1.2012 22:39:06". כלומר, הוא מציג את תאריך העדכון האחרון שלו כמו שצריך, אבל לא את הקובץ עצמו...
טעות שלי, זה לא עובד כמו שצריך.
ועכשיו כן! :)
לא השתמשתי נכון ב-key() ו-next(). כנראה זה לא השימוש שלהם.
פשוט הוספתי שורה קצרה לפני ה-foreach:
אבל בכל זאת אשמח לדעת איך לגשת למפתח של האיבר הנוכחי במערך בתוך לולאת foreach. :)
וגם במקום השורה
ליצור מערך שיכיל את כל הקבצים שאין ברצוני להציג, ושהם לא יוצגו.
(הידע שלי ב-PHP לא משהו לבינתיים).
זה foreach
{
echo 'key is ', $elKey, ' value is ', $elValue;
}
ובמקרה השני in_array
if(in_array($current_file, $skip)) continue;
תודה רבה. :)